
#include "IO.h"
#include "BSP_Config.h"
#include "Alarm.h"
#include "Door.h"

#define SigPinNum		SigType_HW_MAX

static const IO_T alarmSignalPin[SigPinNum] = {
	[SigType_Mag] = IO_INIT_TABLE(MAG_GP, MAG_PIN),
//	[SigType_Fire] = IO_INIT_TABLE(FIRE_GP, FIRE_PIN),
//	[SigType_Tamper] = IO_INIT_TABLE(ALARM_SIGNAL_GP, ALARM_SIGNAL_PIN),
};
	
//static const IO_T alarmOut = IO_INIT_TABLE(ALARM_OUT_GP, ALARM_OUT_PIN);

/*
报警信号输出
参数：@state：0 - 报警解除；1 - 报警触发
返回：
*/
void BSP_Alarm_Out(uint8_t state){
	//IO_Set(&alarmOut, state);
}

/*
检测报警输出信号状态
参数：
返回：0 - 报警解除；1 - 报警触发
*/
int BSP_Alarm_State(void){
	return 0;//IO_Get(&alarmOut);
}

/*
检测报警输入信号状态
参数：
返回：0 - 低电平；1 - 高电平
*/

int BSP_Alarm_Get(uint8_t type){
	return IO_Get(&alarmSignalPin[type]);
}

/*
报警信号检测
参数：
返回：0 - 没有报警信号；1 - 报警信号触发
*/
uint8_t BSP_Alarm_Signal(void){
	uint8_t sig = 0;

	if(Door_Mode() == DOOR_M_NormalOpen){
		//--常开模式	: 门开是0 门关是1
		if(!IO_Get(&alarmSignalPin[SigType_Mag])){
			//门磁报警，低电平报警
			sig |= (1u << SigType_Mag);
		}
	}
	else{
		//--常闭模式	: 门开是1 门关是0
		if(IO_Get(&alarmSignalPin[SigType_Mag])){
			//门磁报警，高电平报警
			sig |= (1u << SigType_Mag);
		}
	}

	/*if(!IO_Get(&alarmSignalPin[SigType_Fire])){
		//消防报警，低电平报警
		sig |= (1u << SigType_Fire);
	}*/
//	if(IO_Get(&alarmSignalPin[SigType_Tamper])){
//		//防拆报警，高电平报警
//		sig |= (1u << SigType_Tamper);
//	}
	return sig;
}

/*
报警硬件初始化
*/
void BSP_Alarm_Init(void){
	uint8_t i;	
	for(i = 0; i < SigPinNum; i++){
		IO_Init(&alarmSignalPin[i], IO_Mode_IN);
	}
	//IO_Init(&alarmOut, IO_Mode_OUT);
	BSP_Alarm_Out(0);
}


